// ==UserScript==
// @name         抖音选品，商品页显示好评率2
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  抖音选品，商品页显示好评率
// @author       hjt
// @match        https://buyin.jinritemai.com/dashboard/merch-picking-hall/merch_promoting*
// @grant        none
// ==/UserScript==

(function () {
  "use strict";

  console.log("代码开始，开始等待");

  // 开始点击评价。使用setTimeout来延迟执行脚本
  setTimeout(function () {
    // 在这里放置你的脚本代码
    console.log("延迟脚本开始执行！");

    // 定义等待的函数
    function wait(ms) {
      return new Promise((resolve) => setTimeout(resolve, ms));
    }

    console.log(" // 确保DOM已完全加载  ");
    function waitForDOMContentLoaded() {
      return new Promise((resolve) => {
        if (
          document.readyState === "complete" ||
          document.readyState === "interactive"
        ) {
          resolve();
        } else {
          document.addEventListener("DOMContentLoaded", resolve);
        }
      });
      console.log(" // DOM已完全加载  ");
    }

    console.log("// 寻找并点击特定ID的tab按钮，该按钮必须位于指定的class中  ");
    function clickSpecificTab() {
      console.log("// 等待DOM内容加载完成  ");
      waitForDOMContentLoaded().then(() => {
        console.log(" // 获取所有auxo-tabs-tab-btn类的元素  ");
        var tabButtons = document.getElementsByClassName("auxo-tabs-tab-btn");

        console.log("// 检查是否找到了元素，并输出信息到控制台");
        if (tabButtons.length > 0) {
          console.log(
            "找到了 " +
              tabButtons.length +
              ' elements with class "auxo-tabs-tab-btn".'
          );
        } else {
          console.log('未找到元素 class "auxo-tabs-tab-btn".');
        }

        console.log(" // 遍历tab按钮  ");
        for (var i = 0; i < tabButtons.length; i++) {
          var tabButton = tabButtons[i];
          console.log("// 检查当前tab按钮的ID是否匹配目标ID  ");
          if (tabButton.id === "rc-tabs-0-tab-c") {
            console.log("// 如果找到，点击该元素  ");
            tabButton.click();
            console.log(
              "已点击 ID rc-tabs-0-tab-c within class auxo-tabs-tab-btn."
            );
            break; // 退出循环，因为我们已经找到了目标
          }
        }

        console.log("// 如果没有找到匹配的ID，输出警告  ");
        if (i === tabButtons.length) {
          console.warn("未发现 ID rc-tabs-0-tab-c.");
        }
      });
    }

    // 调用函数，点击ID为"rc-tabs-0-tab-c"的元素
    clickSpecificTab();

    // 等待2秒
    wait(1000).then(() => {
      console.log("已等待2秒.");
    });

    console.log("点击程序执行结束");
  }, 2000); // 延迟3秒

  // 开始计算好评。使用setTimeout来延迟执行脚本
  setTimeout(function () {
    // 在这里放置你的脚本代码
    console.log("延迟开始计算好评！");

    // 用于查找包含特定文本的元素
    function findElementByText(selector, text) {
      const elements = document.querySelectorAll(selector);
      for (const element of elements) {
        if (element.textContent && element.textContent.includes(text)) {
          return element;
        }
      }
      return null;
    }

    // 用于解析带有逗号分隔符的数字字符串，并返回整数
    function parseCommaSeparatedNumber(numberStr) {
      const cleanNumber = numberStr.replace(/[^\d]/g, "");
      return parseInt(cleanNumber, 10);
    }

    // 显示评价百分比
    function displayRatingPercentages() {
      const selector = ".product-relative__comment-class";
      const positiveText = "好评";
      const totalText = "全部"; // 注意：这里我更改了文本以匹配源代码中的可能内容

      const positiveCommentsElement = findElementByText(selector, positiveText);
      const totalCommentsElement =
        findElementByText(selector, totalText) ||
        findElementByText(selector, "全部评价"); // 添加了对'全部评价'的支持

      if (!positiveCommentsElement || !totalCommentsElement) {
        console.error("无法找到评价数元素");
        return;
      }

      const positiveCountMatch =
        positiveCommentsElement.textContent.match(/(\d+(,\d+)*)/);
      const totalCountMatch =
        totalCommentsElement.textContent.match(/(\d+(,\d+)*)/);

      const positiveCount = positiveCountMatch
        ? parseCommaSeparatedNumber(positiveCountMatch[1])
        : 0;
      const totalCount = totalCountMatch
        ? parseCommaSeparatedNumber(totalCountMatch[1])
        : 0;

      const positiveRate =
        totalCount > 0 ? ((positiveCount / totalCount) * 100).toFixed(2) : 0;

      // 创建显示容器和文本元素
      const displayContainer = document.createElement("div");
      displayContainer.style.position = "absolute"; // 使用绝对定位
      displayContainer.style.padding = "10px";
      displayContainer.style.border = "1px solid black";
      displayContainer.style.zIndex = "9999"; // 确保显示在其他内容之上

      // 根据好评率设置背景颜色
      displayContainer.style.backgroundColor =
        positiveRate > 85 ? "yellow" : "#FF69B4";

      const totalTextElement = document.createElement("p");
      totalTextElement.textContent = `总评价数: ${totalCount.toLocaleString()}`; // 使用toLocaleString()来格式化数字
      displayContainer.appendChild(totalTextElement);

      const positiveTextElement = document.createElement("p");
      positiveTextElement.textContent = `好评数: ${positiveCount.toLocaleString()}`;
      displayContainer.appendChild(positiveTextElement);

      const rateTextElement = document.createElement("p");
      rateTextElement.textContent = `好评率: ${positiveRate}%`;
      displayContainer.appendChild(rateTextElement);

      // 定位到特定元素上方10px处
      const tabElement = document.querySelector("#rc-tabs-0-tab-c"); // 使用ID选择器直接找到元素
      if (tabElement) {
        const tabRect = tabElement.getBoundingClientRect(); // 获取元素的位置和大小信息
        displayContainer.style.top = `${
          tabRect.top - displayContainer.offsetHeight - 150
        }px`; // 计算上方10px的位置
        displayContainer.style.left = `${tabRect.left}px`; // 与元素左侧对齐
        document.body.appendChild(displayContainer); // 将显示容器添加到body中，也可以添加到更接近目标元素的父容器中以避免可能的定位问题。
      } else {
        console.error("无法找到用户评价标签元素");
      }
    }

    // 由于DOM已经加载完成，直接调用函数显示评价百分比
    displayRatingPercentages();

    console.log("好评计算结束");
  }, 3000); // 延迟10秒
})();
